<?php
namespace libs\qoy\Cache;
/**
 * Multi 组合模式下的多级缓存
 *
 * - 可以自定义添加多重缓存，注意优先添加高效缓存
 * - 最终将委托给各级缓存进行数据的读写，其中读取为短路读取
 */

class Multi implements ICache {
    
    protected $caches = array();
    /**
     * 添加缓存实体
     * @param \libs\qoy\Cache\ICache $cache
     */
    public function addCache(ICache $cache) {
		$this->caches[] = $cache;
    }
    /**
     * @see ICache->set
     */
    public function set(string $key, $value, int $expire = 600) {
        foreach ($this->caches as $cache) {
			$cache->set($key, $value, $expire);
		}
    }

    /**
     * @see ICache->get
     */
    public function get(string $key) {
        foreach ($this->caches as $cache) {
			$value = $cache->get($key);
			if ($value !== NULL) {
				return $value;
			}
		}

		return NULL;
    }
    /**
     * @see ICache->delete
     */
    public function delete(string $key) {
		foreach ($this->caches as $cache) {
			$cache->delete($key);
		}
    }
}
